/*************************************************
 * 
 * Copyright by Bruno Eberhard
 * 
 *************************************************/
package fightplan.algorithmen;

import java.util.Comparator;
import java.util.Random;

import fightplan.business.AbstractFighter;
import fightplan.business.Category;

public class SeedComparator implements Comparator<AbstractFighter> {
	private Category category;
	private int xor;

	/**
	 * @param category
	 * 
	 *            Der Name der Kategorie wird als Seed für die Auslosung
	 *            verwendet. Das heisst, gleicher Kategoriennamen und gleiche
	 *            Teilnehmer bewirkt eine gleiche Auslosung
	 */
	public SeedComparator(Category category) {
		this.category = category;
		Random random = new Random(category.getNameOrDescription().hashCode());
		xor = random.nextInt();
	}

	public synchronized int compare(AbstractFighter o1, AbstractFighter o2) {
		int pos1 = category.getSeeds().indexOf(o1);
		int pos2 = category.getSeeds().indexOf(o2);
		if (pos1 < 0)
			pos1 = Integer.MAX_VALUE;
		if (pos2 < 0)
			pos2 = Integer.MAX_VALUE;
		if (pos1 < pos2)
			return -1;
		if (pos1 > pos2)
			return 1;

		int hash1 = o1.getName().hashCode();
		int hash2 = o2.getName().hashCode();

		hash1 = hash1 ^ xor;
		hash2 = hash2 ^ xor;

		if (hash1 == hash2)
			return 0;
		return hash1 < hash2 ? 1 : -1;
	}

}